package com.codemonkey.lq.common.util;

import java.io.File;
import java.net.URLEncoder;
import java.nio.charset.Charset;

import javax.swing.filechooser.FileSystemView;

import org.apache.commons.io.FilenameUtils;

public final class PathUtils {

	public static void main(String[] args) {
		String relativelyPath = System.getProperty("user.dir");
		System.out.println(relativelyPath);
	}

	private PathUtils() {
		throw new Error("Can not instantize ! ! !");
	}

	/**
	 * @param appClassLoader
	 * 				不能传入null, 传入调用本方法的所在类的classloader, 例如 this.getClass().getClassLoader()
	 * TODO  未完成！！
	 * @return
	 */
	private static String getProjectRootPath(ClassLoader appClassLoader) {
		assert null != appClassLoader;

		final String classLoaderPath = appClassLoader.getResource("/").getPath();//.getResource("").getPath();这个在不同的Tomcat下表现不同, 所以修改为getResource("/").getPath()
		return URLEncoder.encode(classLoaderPath);
	}

	/**
	* 这个方法最好不要被单独到第三方jar中.不确定会有什么影响.
	*/
	public static String getProjectRootPath() {
		// String fullPath = getFullPath(PathUtils.class.getClassLoader().getResource("/").getPath(), 3);

		// 相关参数 参见下  E:\gitRepository\_javaDir\javaCode\_thirdlibsLearing\src\test\java\slf4j\__log4j2\_notes\log4j2_all.xml
		
		String relativelyPath = System.getProperty("user.dir");
		return relativelyPath;
	}

	public static String getDesktopLocation() {
		File desktopDir = FileSystemView.getFileSystemView().getHomeDirectory();
		final String desktopPath = desktopDir.getAbsolutePath();
		return desktopPath;
	}
	
	public static String getPathByDesktopLocation(String relativePath) {
		return FilenameUtils.concat(getDesktopLocation(), relativePath);
	}

	/**
	 * @param cl
	 *            可传入null,则直接使用默认的AppClassLoader
	 * @return
	 */
	public static String getClasspath(ClassLoader cl) {
		if (null == cl) {
			cl = Thread.currentThread().getContextClassLoader();
		}
		return cl.getResource("").getPath();
	}

	// 获取jar所在的路径
	public static String getJarFullPath() {
		// 查看 _tips_java.md 文件

		// 从jar包路径的到jar包的目录，我的方法是：
		String path = PathUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath();
		int firstIndex = path.lastIndexOf(System.getProperty("path.separator")) + 1;
		int lastIndex = path.lastIndexOf(File.separator) + 1;
		path = path.substring(firstIndex, lastIndex);

		return path;
	}

	// -------------------------------------------
}
